package com.realtyreg.webview.message;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Component;
import org.springframework.ui.Model;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.Locale;

/**
 * Класс для сохранения серверных сообщений пользователю
 * Created by Petro 13.01.13 20:19
 */
@Component
public class MessageSaver {

    private static final String MESSAGE_ATTRIBUTE_KEY = "serverMessage"; //ключ атрибута, хранящего сообщение пользователю

    @Autowired
    @Qualifier(value = "messageSource")
    MessageSource messageSource;

    /**
     * Сохраняет сообщение в реквест
     * @param model      модель
     * @param type       тип сообщения
     * @param message    сообщение
     */
    public void saveMessage(Model model, MessageType type, String message) {
        model.addAttribute(MESSAGE_ATTRIBUTE_KEY, new ServerMessage(type, message));
    }

    /**
     * Сохраняет сообщение в реквест
     * @param model      модель
     * @param type       тип сообщения
     * @param messageKey ключ сообщения
     * @param locale     локаль
     */
    public void saveMessage(Model model, MessageType type, String messageKey, Locale locale) {
        String message = messageSource.getMessage(messageKey, new Object[]{}, locale);
        model.addAttribute(MESSAGE_ATTRIBUTE_KEY, new ServerMessage(type, message));
    }

    /**
     * Сохраняет сообщение в реквест
     * @param model      модель
     * @param type       тип сообщения
     * @param messageKey ключ сообщения
     * @param args       массив аргументов
     * @param locale     локаль
     */
    public void saveMessage(Model model, MessageType type, String messageKey, Object[] args, Locale locale) {
        if (args == null)
            args = new Object[]{};
        String message = messageSource.getMessage(messageKey, args, locale);
        model.addAttribute(MESSAGE_ATTRIBUTE_KEY, new ServerMessage(type, message));
    }

    /**
     * Сохраняет сообщение в сессию
     * @param redirectAttributes    атрибуты сессии
     * @param type                  тип сообщения
     * @param messageKey            ключ сообщения
     * @param locale                локаль
     */
    public void saveSessionMessage(RedirectAttributes redirectAttributes, MessageType type, String messageKey, Locale locale) {
        String message = messageSource.getMessage(messageKey, new Object[]{}, locale);
        redirectAttributes.addFlashAttribute(MESSAGE_ATTRIBUTE_KEY, new ServerMessage(type, message));
    }
}
